package com.dxf.chepter04

/**
 *  java 构造器 构造方法 可重载
 *
 *    如果没有定义构造器方法,系统会自动生成一个默认无参构造器
 *
 *    一旦定义了自己的构造器,默认的方法就被覆盖了
 *
 *
 *    ==============================================
 *
 *    scala构造器也支持重载
 *
 *    主构造器 和 辅助构造器
 *
 *    class 类名(形参列表){ //主构造器
 *
 *    }
 *
 *
 *    def this(形参列表){//辅助构造器,可以有多个
 *
 *    }
 *
 *
 *   scala构造器特点:
 *    1 构造器无返回值,用来初始化属性
 *    2 主构造器声明直接放置于类名之后(反编译)
 *    3 主构造器会执行类定义中的所有语句
 *    4 如果主构造器无参数,小括号可以省略,构建对象时的小括号也可以省略
 *    5 辅助构造器名称 this (和java不一样),多个辅助构造器通过不用参数列表进行区分,底层就是java的重载
 *    6 辅助构造器必须在第一行显示调用主构造器
 *
 */
object T44_构造方法 {
  def main(args: Array[String]): Unit = {

    var p1 = new Person("jack2")
    println(p1)

  }



}

class  Person(inName:String,inAge:Int){
 //主构造器会执行类定义中的所有语句
  println(age,name)
  var name:String = inName
  var age:Int =inAge

  println(age,name)
  println("~~~~~~~~~")


 // 6 辅助构造器必须在第一行显示调用主构造器
  def this(name:String){
    this("tx",13)
    this.name=name //只初始化name
  }

  def this(age:Int){
    this("x")
    this.age=age
  }



  override def toString: String = {
    "name="+name+" age="+age
  }


}

